#ifndef _5a6b3911_45aa_459e_9d64_28cb8c419cc0__EXCEPTION_H__
#define _5a6b3911_45aa_459e_9d64_28cb8c419cc0__EXCEPTION_H__

#include <string>
#include <exception>


#define Invalid_Callback_Error  L"callbacks is invalid."

class BasicException : public std::exception
{
public:
	BasicException( const std::wstring& message )
		:message_(message)
	{}
	virtual ~BasicException() throw()
	{}
private:
	std::wstring message_;
};

class InvalidCallBackException : public BasicException
{
public:
	InvalidCallBackException(const std::wstring & message )
		:BasicException( message )
	{}
	InvalidCallBackException()
		:BasicException( Invalid_Callback_Error )
	{}
	virtual ~InvalidCallBackException() throw(){};
};

template <typename T>
inline static T InvalidCall()
{
	throw InvalidCallBackException();
}

template <>
inline void InvalidCall<void>()
{
}













#endif //_5a6b3911_45aa_459e_9d64_28cb8c419cc0__EXCEPTION_H__